package com.jxnu.escms.Dao.UserDao;

import com.jxnu.escms.Pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

@Mapper
@Repository
public interface UserDao {

    /**
     * 通过用户名和密码判断是否存在用户
     * @param username
     * @param password
     * @return 存在则返回用户
     */
    public User getUserByNameAndPass(
            @Param("name") String username,
            @Param("pass") String password);

    /**
     * 通过邮箱和密码判断是否存在用户
     * @param email
     * @param pass
     * @return 存在则返回用户
     */
    public User getUserByEmailAndPass(String email, String pass);

    /**
     * 更新用户登录时间
     * @param time
     * @param id
     * @return
     */
    public int updateTime(String time, Integer id);

    /**
     * 通过用户名和邮箱判断是否存在用户（注册用户时用）
     * @param name
     * @param email
     * @return
     */
    public User getAllByEmailAndName(String name, String email);

    /**
     * 根据注册是的数据注册用户，权限默认是住户
     * @param
     * @return
     */
    public int insertUser(String username, String email, String password, String power);

    /**
     * 更新密码
     * @param newPass
     * @param id
     * @return
     */
    public int updatePass(@Param("newPass")String newPass, int id);

    /**
     * 通过用户名，邮箱来更新密码
     * @param name
     * @param email
     * @param newPass
     * @return
     */
    public int updatePasswordByNameAndEmail(@Param("username") String name,
                                        @Param("email") String email,
                                        @Param("newPassword") String newPass);

    /**
     * 获取用户地址信息
     * @param id
     * @return
     */
    public Map<String, Object> getUserAddress(Integer id);

    /**
     * 通过用户ID获取用户信息
     * @param id
     * @return
     */
    public User getUserById(int id);

    public int changeUserMessage(User user);

    /**
     * 判断是否存在名为name的社区
     * @param name
     * @return
     */
    public Map containCom(String name);

    /**
     * 新增社区
     * @param name
     * @return
     */
    public int insertCom(String name);

    /**
     * 更新用户地址
     * @param userId
     * @param comId
     * @param build
     * @param nuit
     * @param door
     * @return
     */
    public int updateAddressInt(int userId, int comId, String build, String nuit, String door);

    /**
     * 得到所有用户信息
     */
    public List<User> getAll();

    /**
     * 从健康打卡表中获取用户最新打卡的健康码
     * @param id
     * @return
     */
    public String getHealthyCode(int id);

    /**
     * 住户管理模块中，管理员修改住户信息时用
     * @param admin_id
     * @param user_id
     * @param control_type
     * @return
     */
    public int operaUser(int admin_id, int user_id, String control_type, String time);

    /**
     *更新用户的账号名，姓名，性别，年龄，状态，健康码，风险等级
     * @param user
     * @return
     */
    public int updateUser(User user);

    public User getUserByRealAndAccount(String account, String realName);

    /**
     * 在住户管理中新增用户
     * @return
     */
    public int addUser(User user);

    public int addAddress(int user_id, int com_id, String build, String nuit, String door);

    /**
     * 得到所有高危用户
     * @return
     */
    public List<User> getAllDanger();
}

